/*
当 `const` 修饰引用时，它被称为**常引用**。常引用的作用是禁止通过引用来修改其引用的目标变量。

**作用**：防止对引用目标的错误修改，保护数据的完整性。

// 常量引用 引用变量
    源数据  可以修改
    引用数据 不可以修改

// 常量引用 作为参数
    函数内不能修改

// 常用引用 引用常量
    都不能修改

// 常量引用 引用临时值
    只有常量引用才可以引用临时值
*/


#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

int func_Add(const int &val_1, const int &val_2) {
    return val_1 + val_2;
}

int main() {
    // 变量
    int val = 10;
    // 引用 常量引用
    const int &ref = val;

// 常量引用 引用变量
    cout << "ref = " << ref << endl;

// 常量引用 作为参数
    int val_1 = 80;
    int val_2 = 80;
    cout << "val_1 + val_2 = " << func_Add(val_1, val_2) << endl;

// 常用引用 引用常量
    // int & ref_1 = 10;  // 不使用常量引用是不能引用常量的
    const int & ref_1 = 10;

    const int val_3 = 50;

    // int & ref_2 = val_3;  // 不使用常量引用是不能引用const 所修饰的常量
    const int & ref_2 = val_3;

// 常量引用 引用临时值
    // int & ref_3 = val_1 + val_2;  // 不使用常量引用是不能引用临时值的
    const int & ref_3 = val_1 + val_2;

    return 0;
}
